WebAssembly Instance তৈরি এবং ব্যবহার

Calling WebAssembly from JavaScript (জাভাস্ক্রিপ্ট থেকে WebAssembly কল করা) - ওয়েবঅ্যাসেম্বলি (WebAssembly) - Computer Programming

325

WebAssembly Instance তৈরি এবং ব্যবহার

WebAssembly Instance হলো একটি WebAssembly মডিউলের কার্যকরী এক্সিকিউশন ইউনিট যা মেমোরি, ফাংশন, এবং ডাটা এক্সপোর্ট করে। WebAssembly.instantiate ব্যবহার করে মডিউলটিকে রান করার জন্য একটি instance তৈরি করা হয়, যা নির্দিষ্ট মেমোরি এবং ইমপোর্ট অবজেক্টগুলির সাথে যুক্ত থাকে।

WebAssembly instance তৈরি করার মাধ্যমে, আপনি মডিউলটির কার্যকারিতা ব্রাউজারে রান করাতে এবং বাইরের কোডের সাথে যোগাযোগ করতে পারেন। WebAssembly instance এর মধ্যে মডিউলটির ফাংশনগুলো কল করা যেতে পারে, এবং এর মধ্যে থাকা মেমোরি বা অন্যান্য রিসোর্সগুলো এক্সেস করা সম্ভব হয়।


1. WebAssembly Instance তৈরি করা

WebAssembly instance তৈরি করতে, প্রথমে আপনাকে WebAssembly মডিউল লোড এবং ইনস্ট্যানশিয়েট করতে হয়। JavaScript এ এই প্রক্রিয়া করার জন্য WebAssembly.instantiate মেথড ব্যবহৃত হয়। এটি একটি মডিউল বা বাইটকোড গ্রহণ করে এবং একটি instance তৈরি করে যা WebAssembly ফাংশন এবং ডাটা এক্সপোর্ট করে।

উদাহরণ: WebAssembly মডিউল লোড এবং Instance তৈরি করা

const importObject = {
  env: {
    log: (msg) => console.log(msg) // বাইরের JavaScript ফাংশন ইমপোর্ট
  }
};

fetch('your_wasm_module.wasm') // WASM ফাইলটি লোড করা
  .then(response => response.arrayBuffer())
  .then(bytes => WebAssembly.instantiate(bytes, importObject)) // WASM মডিউল ইনস্ট্যানশিয়েট করা
  .then(wasmModule => {
    // ওয়েব অ্যাসেম্বলি ইনস্ট্যান্স থেকে এক্সপোর্ট করা ফাংশন কল করা
    const { add } = wasmModule.instance.exports;
    const result = add(5, 7); // 5 + 7 করবে
    console.log("Result from WebAssembly:", result); // 12 আউটপুট
  })
  .catch(console.error);

এখানে:

  • fetch দিয়ে WASM ফাইলটি লোড করা হচ্ছে।
  • WebAssembly.instantiate মেথড দিয়ে মডিউলটি ইনস্ট্যানশিয়েট করা হচ্ছে এবং importObject প্যারামিটার হিসেবে বাইরের ফাংশন (যেমন log) দেয়া হচ্ছে।
  • wasmModule.instance.exports এর মাধ্যমে WASM ফাংশন add এক্সপোর্ট করা হচ্ছে এবং কল করা হচ্ছে।

2. WebAssembly Instance এর উপাদান

2.1 Exports

WebAssembly মডিউলে ডিফাইন করা ফাংশন এবং ডাটা বাইরের কোডের জন্য export করা হয়। এগুলি ইনস্ট্যান্স থেকে এক্সপোর্ট করা হয় এবং আপনি JavaScript থেকে সেগুলির অ্যাক্সেস পেতে পারেন।

(module
  (func $add (param $a i32) (param $b i32) (result i32)
    (i32.add
      (local.get $a)
      (local.get $b)
    )
  )
  (export "add" (func $add))
)

এখানে add ফাংশনটি এক্সপোর্ট করা হয়েছে, যা বাইরের কোডে ব্যবহৃত হতে পারে।

2.2 Imports

WebAssembly.instantiate মেথডের দ্বিতীয় প্যারামিটার হিসেবে একটি importObject পাস করা হয়, যা বাইরের ফাংশন বা ডাটা (যেমন JavaScript এর ফাংশন) মডিউলে সরবরাহ করে।

const importObject = {
  env: {
    log: (msg) => console.log(msg)
  }
};

এখানে log ফাংশনটি env অবজেক্টের মাধ্যমে WebAssembly মডিউলে ইনপুট হিসাবে দেয়া হয়েছে, যাতে WebAssembly কোড log ফাংশন কল করতে পারে।

2.3 Memory

WebAssembly instance এর মধ্যে একটি memory থাকে, যা একটি বিশেষ ধরনের মেমোরি, যা JavaScript থেকে অ্যাক্সেস করা যায়। WebAssembly মডিউলে মেমোরি এক্সপোর্ট করা হলে, আপনি এটি ব্যবহার করতে পারেন।

const { memory } = wasmModule.instance.exports;

এখানে memory হলো মডিউল থেকে এক্সপোর্ট করা একটি মেমোরি, যা JavaScript থেকে ব্যবহৃত হতে পারে।

2.4 Tables

WebAssembly মডিউল টেবিল ব্যবহার করতে পারে যা ফাংশন পয়েন্টার ধারণ করে। এটি সাধারণত ডাইনামিক ফাংশন কলের জন্য ব্যবহৃত হয়, কিন্তু এটি তুলনামূলকভাবে কম ব্যবহৃত হয়।


3. WebAssembly Instance ব্যবহার করার উদাহরণ

ধরা যাক, আপনার একটি WebAssembly মডিউল রয়েছে যা দুটি পূর্ণসংখ্যার যোগফল নির্ণয় করে, এবং আপনি সেই ফাংশনটি JavaScript এর মাধ্যমে কল করতে চান। এটি করতে আপনার প্রথমে WASM ফাইল লোড এবং ইনস্ট্যানশিয়েট করতে হবে।

WebAssembly মডিউল (WAT):

(module
  (func $add (param $a i32) (param $b i32) (result i32)
    (i32.add
      (local.get $a)
      (local.get $b)
    )
  )
  (export "add" (func $add))
)

JavaScript কোড:

const importObject = {
  env: {
    log: (msg) => console.log(msg)
  }
};

fetch('your_module.wasm') // WebAssembly মডিউল লোড
  .then(response => response.arrayBuffer())
  .then(bytes => WebAssembly.instantiate(bytes, importObject)) // ইনস্ট্যানশিয়েট করা
  .then(wasmModule => {
    const { add } = wasmModule.instance.exports;
    const result = add(10, 20); // WebAssembly ফাংশন কল
    console.log("Result from WebAssembly:", result); // 30 আউটপুট হবে
  })
  .catch(console.error);

এখানে:

  • add ফাংশন WebAssembly থেকে এক্সপোর্ট করা হয়েছে এবং JavaScript কোডে কল করা হয়েছে।
  • WebAssembly মডিউল env.log ফাংশন ইমপোর্ট করছে যা JavaScript থেকে WebAssembly কোডকে কল করতে সাহায্য করে।

4. WebAssembly Instance এর জন্য বিশেষ ফিচার

  • WebAssembly Threads: কিছু পরিস্থিতিতে, আপনি WebAssembly মডিউলে থ্রেড ব্যবহারের জন্য use_threads ফ্ল্যাগ ব্যবহার করতে পারেন। এই ক্ষেত্রে, WASI এর pthread সাপোর্ট প্রয়োজন হতে পারে।
  • Memory Management: WebAssembly মডিউল নিজেই মেমোরি পরিচালনা করে, তবে আপনি JavaScript এর মাধ্যমে মেমোরি অ্যাক্সেস করে ডেটা ম্যানিপুলেশন করতে পারেন।

সারসংক্ষেপ

WebAssembly instance তৈরি করা হলো একটি WebAssembly মডিউলকে কার্যকরভাবে রান করার জন্য একটি কার্যকরী এক্সিকিউশন ইউনিট তৈরি করা। JavaScript দিয়ে WebAssembly.instantiate মেথড ব্যবহার করে আপনি মডিউলটি লোড এবং ইনস্ট্যানশিয়েট করতে পারেন। এই instance এর মাধ্যমে আপনি মডিউলটির ফাংশন কল করতে পারেন, মেমোরি এবং অন্যান্য রিসোর্স অ্যাক্সেস করতে পারেন। WASM কোডের সাথে বাইরের কোডের ইন্টারঅ্যাকশন সহজ করে WebAssembly instance।

Content added By
Promotion

Are you sure to start over?

Loading...